/*实践练习2：数组与结构体编程（成绩统计与分析）
1．学生成绩统计（一维数组）
从键盘输入一个班（全班最多不超过30人）学生某门课的成绩，当输入成绩为负值时，输入结束，分别实现下列功能：
（1）统计不及格人数并打印不及格学生名单；
（2）统计成绩在全班平均分及平均分之上的学生人数，并打印这些学生的名单；
（3）以直方图方式统计各分数段的学生人数及所占的百分比。形式如下：
分数段  学生人数	  图形
<60   3（10%）	***
60-69  8（…）	********
70-79	 7（…）	*******
80-89	 8（…）	********
>=90	 4（…）	****      */
//计科1班  庄洵妍
//140201011041
#include <stdio.h>
int main()
{
	int N, n = 0, i, sum = 0, n1 = 0, n2 = 0, N1, N2, N3, N4, N5;//n1为不及格人数，n为班级人数,n2为成绩在全班平均分及平均分之上的学生人数,N1,N2,N3,N4,N5为5个不同分数段人数统计
	int score[30] = { 0 }, ave;
	char name[30][8];             //三十个 字数不超过8的名字，一个字为2
	printf("请输入学生人数：");
	scanf("%d", &N);
	for (i = 0; i<N; i++){
		printf("\n请输入第%d个学生姓名:", i + 1);
		scanf("%s", name[i]);
		printf("请输入分数:");
		scanf("%d", &score[i]);
		if (score[i]<0)
			break;
		n += 1;
	}//成绩的输入
	for (i = 0; i<n; i++){
		if (score[i]<60){
			n1 += 1;
			printf("\n不及格的学生有:%s\n", name[i]);
		}
	}
	printf("不及格的人数为：%d\n", n1);//统计并列出不及格的学生人数及名单

	printf("________________________________________________________\n");

	printf("成绩在全班平均分及平均分之上的学生名单如下：\n");
	for (i = 0; i <= n; i++){
		sum += score[i];                   //计算所有学生的总分
	}
	ave = sum / n;
	for (i = 0; i<n; i++){
		if (score[i] >= ave){
			printf("%s\n", name[i]);
			n2 += 1;
		}
	}

	printf("成绩在全班平均分及平均分之上的学生人数为：%d\n", n2);//统计并列出成绩在全班平均分及平均分之上的学生人数及名单
	printf("___________________________________________________\n");

	printf("以直方图方式统计各分数段的学生人数及所占的百分比\n");
	N1 = N2 = N3 = N4 = N5 = 0;
	for (i = 0; i<n; i++){
		if (score[i]<60)N1 += 1;
		if (score[i] >= 60 && score[i]<70)N2 += 1;
		if (score[i] >= 70 && score[i]<80)N3 += 1;
		if (score[i] >= 80 && score[i]<90)N4 += 1;
		if (score[i] >= 90 && score[i] <= 100)N5 += 1;
	}
	printf("分数段     学生人数(人数比例)               图形\n");
	printf("0~59       %2d(%9.2lf%%)                    ", N1, (double)N1 / n);
	for (i = 0; i<N1; i++)printf("*");
	printf("\n");
	printf("60~69      %2d(%9.2lf%%)                    ", N2, (double)N2 / n);
	for (i = 0; i<N2; i++)printf("*");
	printf("\n");
	printf("70~79      %2d(%9.2lf%%)                    ", N3, (double)N3 / n);
	for (i = 0; i<N3; i++)printf("*");
	printf("\n");
	printf("80~89      %2d(%9.2lf%%)                    ", N4, (double)N4 / n);
	for (i = 0; i<N4; i++)printf("*");
	printf("\n");
	printf("90~100     %2d(%9.2lf%%)                    ", N5, (double)N5 / n);
	for (i = 0; i<N5; i++)printf("*");
	printf("\n");                            //输出表格
	return 0;
}


/*请输入学生人数：3

请输入第1个学生姓名:d
请输入分数:45

请输入第2个学生姓名:g
请输入分数:67

请输入第3个学生姓名:h
请输入分数:89

不及格的学生有:d
不及格的人数为：1
_______________________________________________________
成绩在全班平均分及平均分之上的学生名单如下：
g
h
成绩在全班平均分及平均分之上的学生人数为：2
___________________________________________________
以直方图方式统计各分数段的学生人数及所占的百分比
分数段     学生人数(人数比例)               图形
0~59        1(     0.33%)                    *
60~69       1(     0.33%)                    *
70~79       0(     0.00%)
80~89       1(     0.33%)                    *
90~100      0(     0.00%)
请按任意键继续. . .

*/